﻿#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPaintEvent>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),
    ui(new Ui::MainWindow),
    m_isBlack(true)
{
    ui->setupUi(this);

    //隐藏圆截面上的工具栏和菜单栏
//    ui->mainToolbar->hide();
    ui->menubar->hide();

    //重新设置MainWindow窗口的大小
    resize((ROW+1)*HIGH,(COLUMN+1)*WIDTH);
}

MainWindow::~MainWindow()
{
    delete ui;
}


//绘制界面，并实现界面的更新
//paintEvent事件是Q他框架中的一个重要事件，他在需要绘制部件时被触发
//常见的paintEvent触发场景
//1.窗口初始化和显示：当窗口首次被创建时，显示或者窗口被覆盖，从最小化恢复时
//2.部件大小或者位置发生变化时
//3.强制绘制，当调用update或repaint函数时
//4.系统事件触发：比如窗口激动，失去焦点等
void MainWindow::paintEvent(QPaintEvent * event)
{
    //画棋盘
    DrawChessBoard();

    //画棋子
    DrawChessPress();

    //是QWidget类的一个成员函数，用于请求窗口重新绘制
    //当调用update函数时，Qt会安排在下一个事件循环中重新绘制窗口
    //如果短时间内多次调用update，Qt只会执行一次重绘操作
    //会将多次请求合并为一次，以提高性能
    update();
}

//鼠标按下的时候，记录棋子的坐标和颜色
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    //获取鼠标点击处的中心点坐标对应的交叉点位置
    //当前记录的不是坐标，只是一个位置而已
    QPoint pt;
    pt.setX(event->pos().x()/WIDTH);
    pt.setY(event->pos().y()/HIGH);

    for(int i = 0;i<m_vecItem.size();i++)
    {
        item item = m_vecItem[i];
        if(item.m_pt == pt)
        {
            return ;
        }
    }

    //当前位置没有棋子的时候我们才会记录棋子信息
    item item(pt,m_isBlack);
    m_vecItem.append(item);

    m_isBlack = !m_isBlack;

    //书写规则
}
//画棋盘
void MainWindow::DrawChessBoard()
{
    //创建画笔用于后续画棋盘
    QPainter paint(this);

    //设置棋盘边框颜色（设置画笔的颜色为黑色，画笔宽度为2）
    paint.setPen(QPen(QColor(Qt::black),2));

    //设置棋盘底色(每个小矩形的填充色)
    paint.setBrush(Qt::darkGray);

    for(int i=0;i<ROW;i++)
    {
        for(int j=0;j<COLUMN;j++)
        {
            //画矩形
            paint.drawRect((i+0.5)*WIDTH,(j+0.5)*HIGH,WIDTH,HIGH);

        }
    }
}

void MainWindow::DrawChessPress()
{
    //创建画笔用于后续画棋子
    QPainter paint(this);

    //设置棋子颜色（也就是设置棋子的填充色）
    //棋子可以不要边框
   for(int i=0;i<m_vecItem.size();i++)
   {
     item item = m_vecItem[i];
     if(item.m_isBlack)
     {
         paint.setBrush(Qt::black);
     }
     else
     {
         paint.setBrush(Qt::white);
     }

     paint.drawEllipse(item.m_pt.x()*HIGH,item.m_pt.y()*WIDTH, WIDTH, HIGH);
   }

}
